<!DOCTYPE html>
<html>
<!--
Copyright 2009 Google Inc.

Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at

     http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
-->
<head>
  <title>Google Earth API Samples - Draggable Placemark</title>
  <meta http-equiv="content-type" content="text/html; charset=utf-8"/>
  <!-- You should probably remove most of this extra cruft if you're copying
       this sample! -->
  <style type="text/css">@import "static/examples.css";</style>
  <style type="text/css">@import "static/prettify/prettify.css";</style>
  <script type="text/javascript" src="static/prettify/prettify.js"></script>
  
  <!-- Change the key below to your own Maps API key -->
  <script type="text/javascript" src="http://www.google.com/jsapi?hl=en&amp;key=ABQIAAAAwbkbZLyhsmTCWXbTcjbgbRSzHs7K5SvaUdm8ua-Xxy_-2dYwMxQMhnagaawTo7L1FE1-amhuQxIlXw"></script>
  <script type="text/javascript">
  /* <![CDATA[ */
  var ge;
  var placemark;
  var dragInfo = null;
  
  google.load("earth", "1");

  function init() {
    google.earth.createInstance('map3d', initCB, failureCB);
  }
  
  function initCB(instance) {
    ge = instance;
    ge.getWindow().setVisibility(true);
    
    // add a navigation control
    ge.getNavigationControl().setVisibility(ge.VISIBILITY_AUTO);
    
    // add some layers
    ge.getLayerRoot().enableLayerById(ge.LAYER_BORDERS, true);
    ge.getLayerRoot().enableLayerById(ge.LAYER_ROADS, true);

    // create the placemark
    placemark = ge.createPlacemark('');
    
    var point = ge.createPoint('');
    point.setLatitude(37);
    point.setLongitude(-122);
    placemark.setGeometry(point);
    
    // add the placemark to the earth DOM
    ge.getFeatures().appendChild(placemark);
    
    // look at the placemark we created
    var la = ge.createLookAt('');
    la.set(37, -122,
      0, // altitude
      ge.ALTITUDE_RELATIVE_TO_GROUND,
      0, // heading
      0, // straight-down tilt
      5000 // range (inverse of zoom)
      );
    ge.getView().setAbstractView(la);
    placemark.setName('Drag Me!');
    
    // listen for mousedown on the window (look specifically for point placemarks)
    google.earth.addEventListener(ge.getWindow(), 'mousedown', function(event) {
      if (event.getTarget().getType() == 'KmlPlacemark' &&
          event.getTarget().getGeometry().getType() == 'KmlPoint') {
        //event.preventDefault();
        var placemark = event.getTarget();
        
        dragInfo = {
          placemark: event.getTarget(),
          dragged: false
        };
      } 
    });
    
    // listen for mousemove on the globe
    google.earth.addEventListener(ge.getGlobe(), 'mousemove', function(event) {
      if (dragInfo) {
        event.preventDefault();
        var point = dragInfo.placemark.getGeometry();
        point.setLatitude(event.getLatitude());
        point.setLongitude(event.getLongitude());
        dragInfo.dragged = true;
      }
    });
    
    // listen for mouseup on the window
    google.earth.addEventListener(ge.getWindow(), 'mouseup', function(event) {
      if (dragInfo) {
        if (dragInfo.dragged) {
          // if the placemark was dragged, prevent balloons from popping up
          event.preventDefault();
        }
        
        dragInfo = null;
      }
    });
    
    document.getElementById('installed-plugin-version').innerHTML =
      ge.getPluginVersion().toString();
  }
  
  function failureCB(errorCode) {
  }
  
  /* ]]> */
  </script>
</head>
<body onload="if(window.prettyPrint)prettyPrint();init();">
  <h1>Google Earth API Samples - Draggable Placemark</h1>
  <dl>
            <dt>Last Modified:</dt><dd>06/08/2009</dd>
    <dt>Installed Plugin Version:</dt><dd id="installed-plugin-version">...</dd>
  </dl>
  <div style="clear: both;"></div>
  
  <div id="ui" style="position: relative;">
    <div id="map3d" style="border: 1px solid silver; width: 500px; height: 500px;"></div>

    <div id="extra-ui" style="position: absolute; left: 520px; top: 0;">
      <h2>Relevant Resources:</h2>
      <ul>
<li><a href="http://code.google.com/apis/earth/documentation/reference/google_earth_namespace.html">google.earth Namespace Reference</a></li>
<li><a href="http://code.google.com/apis/earth/documentation/reference/interface_kml_point.html">KmlPoint Reference</a></li>
<li><a href="http://code.google.com/apis/earth/documentation/reference/interface_kml_event.html">KmlEvent Reference</a></li>
<a id="playground-button" href="http://code.google.com/apis/ajax/playground/?exp=earth#draggable_placemark"><img src="static/playground-button.png"/></a>      </ul>
      <h2>Relevant Code Excerpt:</h2>      <pre class="prettyprint lang-js">var dragInfo = null;</pre>      <pre class="prettyprint lang-js">placemark.setName('Drag Me!');

// listen for mousedown on the window (look specifically for point placemarks)
google.earth.addEventListener(ge.getWindow(), 'mousedown', function(event) {
  if (event.getTarget().getType() == 'KmlPlacemark' &amp;&amp;
      event.getTarget().getGeometry().getType() == 'KmlPoint') {
    //event.preventDefault();
    var placemark = event.getTarget();
    
    dragInfo = {
      placemark: event.getTarget(),
      dragged: false
    };
  } 
});

// listen for mousemove on the globe
google.earth.addEventListener(ge.getGlobe(), 'mousemove', function(event) {
  if (dragInfo) {
    event.preventDefault();
    var point = dragInfo.placemark.getGeometry();
    point.setLatitude(event.getLatitude());
    point.setLongitude(event.getLongitude());
    dragInfo.dragged = true;
  }
});

// listen for mouseup on the window
google.earth.addEventListener(ge.getWindow(), 'mouseup', function(event) {
  if (dragInfo) {
    if (dragInfo.dragged) {
      // if the placemark was dragged, prevent balloons from popping up
      event.preventDefault();
    }
    
    dragInfo = null;
  }
});</pre>    </div>
  </div>
</body>
</html>
